﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Biblioteca.dao.iClassesDAO.pessoa;
using Biblioteca.classesBasicas.pessoa;
using Biblioteca.util;
using System.Data.SqlClient;

namespace Biblioteca.dao.classesDAO.pessoa
{
    class FuncionarioDAO : Conexao, IFuncionarioDAO
    {
        public void cadastrar(Funcionario objeto)
        {
            try
            {
                this.abrirConexao();
                SqlCommand comandoSql = conexao.CreateCommand();
                comandoSql.CommandText = "INSERT INTO FUNCIONARIO(NOME, SEXO, IDADE, RG, CPF, CARGO, SALARIO) VALUES ('" + objeto.Nome + "','" + objeto.Sexo + "','" + objeto.Idade + "','" + objeto.Rg + "','" + objeto.Cpf + "','" + objeto.Cargo + "','" + objeto.Salario + "')";
                comandoSql.ExecuteNonQuery();
                comandoSql.Dispose();
                this.fecharConexao();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message + " Erro ao cadastar Funcionario.");
            }
            finally
            {
                this.fecharConexao();
            }
        }

        public void alterar(Funcionario objeto)
        {
            try
            {
                this.abrirConexao();
                SqlCommand comando = new SqlCommand("UPDATE FUNCIONARIO SET NOME='" + objeto.Nome + "', SEXO='" + objeto.Sexo + "', IDADE='" + objeto.Idade + "', RG='" + objeto.Rg + "', CPF='" + objeto.Cpf + "', CARGO='" + objeto.Cargo + "', SALARIO='" + objeto.Salario + "'" +" WHERE FUNCIONARIO.ID_FUNCIONARIO =" + Convert.ToInt32(objeto.Id) , this.conexao);
                comando.ExecuteNonQuery();
                comando.Dispose();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message + " Erro ao alterar Funcionario.");
            }
            finally
            {
                this.fecharConexao();
            }
        }

        //CRIAR PROCEDURE
        public void remover(Funcionario objeto)
        {
            try
            {
                this.abrirConexao();
                SqlCommand comando = new SqlCommand("EXEC PROCEDURE_DELETAR_FUNCIONARIO " + Convert.ToInt32(objeto.Id), this.conexao);
                comando.ExecuteNonQuery();
                comando.Dispose();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message + " Erro ao alterar Funcionario.");
            }
            finally
            {
                this.fecharConexao();
            }
        }

        public Funcionario consultarPorId(string id)
        {
            Funcionario funcionarioMetodo = null;

            try
            {
                this.abrirConexao();
                SqlCommand comando = new SqlCommand("SELECT ID_FUNCIONARIO, NOME, SEXO, IDADE, RG, CPF, CARGO, SALARIO FROM FUNCIONARIO WHERE FUNCIONARIO.ID_FUNCIONARIO=" + Convert.ToInt32(id), this.conexao);
                SqlDataReader DbReader = comando.ExecuteReader();
                if (DbReader.Read())
                {
                    funcionarioMetodo = new Funcionario();
                    funcionarioMetodo.Id = Convert.ToString(DbReader.GetInt32(DbReader.GetOrdinal("ID_FUNCIONARIO")));
                    funcionarioMetodo.Nome = DbReader.GetString(DbReader.GetOrdinal("NOME"));
                    funcionarioMetodo.Sexo = DbReader.GetString(DbReader.GetOrdinal("SEXO"));
                    funcionarioMetodo.Idade = DbReader.GetString(DbReader.GetOrdinal("IDADE"));
                    funcionarioMetodo.Rg = DbReader.GetString(DbReader.GetOrdinal("RG"));
                    funcionarioMetodo.Cpf = DbReader.GetString(DbReader.GetOrdinal("CPF"));
                    funcionarioMetodo.Cargo = DbReader.GetString(DbReader.GetOrdinal("CARGO"));
                    funcionarioMetodo.Salario = DbReader.GetString(DbReader.GetOrdinal("SALARIO"));
                }

                DbReader.Close();
                comando.Dispose();
            }

            catch (Exception ex)
            {
                throw new Exception(ex.Message + " Erro ao consultar o Funcionario.");
            }

            finally
            {
                this.fecharConexao();
            }
            return funcionarioMetodo;
        }

        public List<Funcionario> listar()
        {
            List<Funcionario> listaFuncionario = new List<Funcionario>();

            try
            {
                this.abrirConexao();
                SqlCommand comando = new SqlCommand("SELECT ID_FUNCIONARIO, NOME, SEXO, IDADE, RG, CPF, CARGO, SALARIO FROM FUNCIONARIO", this.conexao);
                SqlDataReader DbReader = comando.ExecuteReader();
                while (DbReader.Read())
                {
                    Funcionario funcionarioMetodo = new Funcionario();
                    funcionarioMetodo.Id = Convert.ToString(DbReader.GetInt32(DbReader.GetOrdinal("ID_FUNCIONARIO")));
                    funcionarioMetodo.Nome = DbReader.GetString(DbReader.GetOrdinal("NOME"));
                    funcionarioMetodo.Sexo = DbReader.GetString(DbReader.GetOrdinal("SEXO"));
                    funcionarioMetodo.Idade = DbReader.GetString(DbReader.GetOrdinal("IDADE"));
                    funcionarioMetodo.Rg = DbReader.GetString(DbReader.GetOrdinal("RG"));
                    funcionarioMetodo.Cpf = DbReader.GetString(DbReader.GetOrdinal("CPF"));
                    funcionarioMetodo.Cargo = DbReader.GetString(DbReader.GetOrdinal("CARGO"));
                    funcionarioMetodo.Salario = DbReader.GetString(DbReader.GetOrdinal("SALARIO"));

                    listaFuncionario.Add(funcionarioMetodo);
                }

                DbReader.Close();
                comando.Dispose();
            }

            catch (Exception ex)
            {
                throw new Exception(ex.Message + " Erro ao listar o Funcionario.");
            }

            finally
            {
                this.fecharConexao();
            }
            return listaFuncionario;
        }

    }
}
